package com.yudaob2b.business.utils;

import org.apache.commons.lang.RandomStringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 这是一个生成id的工具类
 */
public class IdGeneratorUtil {

	/**
	 * 生成32位的UUID
	 *
	 * @return		32位的UUID
	 */
	public static String generate() {
		String s = UUID.randomUUID().toString();
		// 去掉“-”符号
		return s.replaceAll("-", "");
	}

	/**
	 * 生成时间戳
	 * 取当前的时间，生成YYYYMMddhhmmss格式的字符串
	 *
	 * @return		YYYYMMddhhmmss格式的时间戳
	 */
	public static String getTimestamp() {
		SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMddhhmmss");
		return sdf.format(new Date());

	}

	/**
	 * 生成指定范围内的随机数
	 *
	 * @param count			字符长度
	 * @return		指定范围内的随机数
	 */
	public static String longRandomHexString(int count) {
		return RandomStringUtils.randomAlphanumeric(count);
	}

	/**
	 * 生成ID
	 *
	 * @return			id
	 */
	public static String createConversationId(int count) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(getTimestamp());
		buffer.append(longRandomHexString(count));
		return buffer.toString();
	}

	/**
	 * 生成订单号
	 *
	 * @return			orderNum
	 */
	public static String getOrderNumByUUId() {
		int machineId = 1;//最大支持1-9个集群机器部署
		int hashCodeV = UUID.randomUUID().toString().hashCode();
		if (hashCodeV < 0) {//有可能是负数
			hashCodeV = -hashCodeV;
		}
		// 0 代表前面补充0
		// 4 代表长度为4
		// d 代表参数为正数型
		return machineId + String.format("%015d", hashCodeV);
	}

	/**
	 * 生成32位的UUID
	 *
	 * @return		32位的UUID
	 */
	public static String generateTen() {
		String s = UUID.randomUUID().toString();
		// 去掉“-”符号
		return s.replaceAll("-", "").substring(22);
	}
}
